<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/compiler.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/compiler.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="Maybe">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19MSU5VWF9DT01QSUxFUl9IXzA_"><span class="b">__LINUX_COMPILER_H</span></a>
<a name="2" /><span class="Maybe">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19MSU5VWF9DT01QSUxFUl9IXzA_"><span class="b">__LINUX_COMPILER_H</span></a>
<a name="3" /><span class="Maybe">       3:</span> 
<a name="4" /><span class="Maybe">       4:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__ASSEMBLY__</span>
<a name="5" /><span class="Maybe">       5:</span> 
<a name="6" /><span class="False">       6:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__CHECKER__</span>
<a name="7" /><span class="False">       7:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X191c2VyXzA_"><span class="b">__user</span></a>        <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">noderef</span><span class="f">,</span> <span class="b">address_space</span><span class="f">(</span><span class="c">1</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="8" /><span class="False">       8:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19rZXJuZWxfMA__"><span class="b">__kernel</span></a>    <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">address_space</span><span class="f">(</span><span class="c">0</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="9" /><span class="False">       9:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19zYWZlXzA_"><span class="b">__safe</span></a>        <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">safe</span><span class="f">)</span><span class="f">)</span>
<a name="10" /><span class="False">      10:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19mb3JjZV8w"><span class="b">__force</span></a>    <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">force</span><span class="f">)</span><span class="f">)</span>
<a name="11" /><span class="False">      11:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19ub2Nhc3RfMA__"><span class="b">__nocast</span></a>    <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">nocast</span><span class="f">)</span><span class="f">)</span>
<a name="12" /><span class="False">      12:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a>    <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">noderef</span><span class="f">,</span> <span class="b">address_space</span><span class="f">(</span><span class="c">2</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="13" /><span class="False">      13:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19tdXN0X2hvbGRfMA__"><span class="b">__must_hold</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">context</span><span class="f">(</span><span class="b">x</span><span class="f">,</span><span class="c">1</span><span class="f">,</span><span class="c">1</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="14" /><span class="False">      14:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlc18w"><span class="b">__acquires</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">context</span><span class="f">(</span><span class="b">x</span><span class="f">,</span><span class="c">0</span><span class="f">,</span><span class="c">1</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="15" /><span class="False">      15:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19yZWxlYXNlc18w"><span class="b">__releases</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">context</span><span class="f">(</span><span class="b">x</span><span class="f">,</span><span class="c">1</span><span class="f">,</span><span class="c">0</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="16" /><span class="False">      16:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlXzA_"><span class="b">__acquire</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">__context__</span><span class="f">(</span><span class="b">x</span><span class="f">,</span><span class="c">1</span><span class="f">)</span>
<a name="17" /><span class="False">      17:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19yZWxlYXNlXzA_"><span class="b">__release</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">__context__</span><span class="f">(</span><span class="b">x</span><span class="f">,</span><span class="f">-</span><span class="c">1</span><span class="f">)</span>
<a name="18" /><span class="False">      18:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19jb25kX2xvY2tfMA__"><span class="b">__cond_lock</span></a><span class="f">(</span><span class="b">x</span><span class="f">,</span><span class="b">c</span><span class="f">)</span>    <span class="f">(</span><span class="f">(</span><span class="b">c</span><span class="f">)</span> <span class="f">?</span> <span class="f">(</span><span class="f">{</span> <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlXzA_"><span class="b">__acquire</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">;</span> <span class="c">1</span><span class="f">;</span> <span class="f">}</span><span class="f">)</span> <span class="f">:</span> <span class="c">0</span><span class="f">)</span>
<a name="19" /><span class="False">      19:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfMA__"><span class="b">__percpu</span></a>    <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">noderef</span><span class="f">,</span> <span class="b">address_space</span><span class="f">(</span><span class="c">3</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="20" /><span class="False">      20:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_SPARSE_RCU_POINTER</span>
<a name="21" /><span class="False">      21:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19yY3VfMA__"><span class="b">__rcu</span></a>        <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">noderef</span><span class="f">,</span> <span class="b">address_space</span><span class="f">(</span><span class="c">4</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="22" /><span class="False">      22:</span> <span class="f">#</span><span class="n">else</span>
<a name="23" /><span class="False">      23:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19yY3VfMA__"><span class="b">__rcu</span></a>
<a name="24" /><span class="False">      24:</span> <span class="f">#</span><span class="n">endif</span>
<a name="25" /><span class="False">      25:</span> <span class="m">extern</span> <span class="m">void</span> <a href="cpu.c_macros_noref.html#_X19jaGtfdXNlcl9wdHJfMA__"><span class="b">__chk_user_ptr</span></a><span class="f">(</span><span class="m">const</span> <span class="m">volatile</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X191c2VyXzA_"><span class="b">__user</span></a> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="26" /><span class="False">      26:</span> <span class="m">extern</span> <span class="m">void</span> <a href="cpu.c_macros_noref.html#_X19jaGtfaW9fcHRyXzA_"><span class="b">__chk_io_ptr</span></a><span class="f">(</span><span class="m">const</span> <span class="m">volatile</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="27" /><span class="Maybe">      27:</span> <span class="f">#</span><span class="n">else</span>
<a name="28" /><span class="Maybe">      28:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X191c2VyXzA_"><span class="b">__user</span></a>
<a name="29" /><span class="Maybe">      29:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19rZXJuZWxfMA__"><span class="b">__kernel</span></a>
<a name="30" /><span class="Maybe">      30:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19zYWZlXzA_"><span class="b">__safe</span></a>
<a name="31" /><span class="Maybe">      31:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19mb3JjZV8w"><span class="b">__force</span></a>
<a name="32" /><span class="Maybe">      32:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19ub2Nhc3RfMA__"><span class="b">__nocast</span></a>
<a name="33" /><span class="Maybe">      33:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19pb21lbV8w"><span class="b">__iomem</span></a>
<a name="34" /><span class="Maybe">      34:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19jaGtfdXNlcl9wdHJfMA__"><span class="b">__chk_user_ptr</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="c">0</span>
<a name="35" /><span class="Maybe">      35:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19jaGtfaW9fcHRyXzA_"><span class="b">__chk_io_ptr</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="c">0</span>
<a name="36" /><span class="Maybe">      36:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19idWlsdGluX3dhcm5pbmdfMA__"><span class="b">__builtin_warning</span></a><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="b">y</span><span class="f">...</span><span class="f">)</span> <span class="f">(</span><span class="c">1</span><span class="f">)</span>
<a name="37" /><span class="Maybe">      37:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19tdXN0X2hvbGRfMA__"><span class="b">__must_hold</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="38" /><span class="Maybe">      38:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlc18w"><span class="b">__acquires</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="39" /><span class="Maybe">      39:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19yZWxlYXNlc18w"><span class="b">__releases</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="40" /><span class="Maybe">      40:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlXzA_"><span class="b">__acquire</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="c">0</span>
<a name="41" /><span class="Maybe">      41:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19yZWxlYXNlXzA_"><span class="b">__release</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="c">0</span>
<a name="42" /><span class="Maybe">      42:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19jb25kX2xvY2tfMA__"><span class="b">__cond_lock</span></a><span class="f">(</span><span class="b">x</span><span class="f">,</span><span class="b">c</span><span class="f">)</span> <span class="f">(</span><span class="b">c</span><span class="f">)</span>
<a name="43" /><span class="Maybe">      43:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfMA__"><span class="b">__percpu</span></a>
<a name="44" /><span class="Maybe">      44:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19yY3VfMA__"><span class="b">__rcu</span></a>
<a name="45" /><span class="Maybe">      45:</span> <span class="f">#</span><span class="n">endif</span>
<a name="46" /><span class="Maybe">      46:</span> 
<a name="47" /><span class="Maybe">      47:</span> <span class="k">/* Indirect macros required for expanded argument pasting, eg. __LINE__. */</span>
<a name="48" /><span class="Maybe">      48:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19fUEFTVEVfMA__"><span class="b">___PASTE</span></a><span class="f">(</span><span class="b">a</span><span class="f">,</span><span class="b">b</span><span class="f">)</span> <span class="b">a</span><span class="f">##</span><span class="b">b</span>
<a name="49" /><span class="Maybe">      49:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19QQVNURV8w"><span class="b">__PASTE</span></a><span class="f">(</span><span class="b">a</span><span class="f">,</span><span class="b">b</span><span class="f">)</span> <a href="cpu.c_macros_noref.html#_X19fUEFTVEVfMA__"><span class="b">___PASTE</span></a><span class="f">(</span><span class="b">a</span><span class="f">,</span><span class="b">b</span><span class="f">)</span>
<a name="50" /><span class="Maybe">      50:</span> 
<a name="51" /><span class="Maybe">      51:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_X19LRVJORUxfX18w"><span class="b">__KERNEL__</span></a>
<a name="52" /><span class="Maybe">      52:</span> 
<a name="53" /><span class="Maybe">      53:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_X19HTlVDX19fMA__"><span class="b">__GNUC__</span></a>
<a name="54" /><span class="Maybe">      54:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">compiler</span><span class="f">-</span><span class="b">gcc</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="55" /><span class="Maybe">      55:</span> <span class="f">#</span><span class="n">endif</span>
<a name="56" /><span class="Maybe">      56:</span> 
<a name="57" /><span class="Maybe">      57:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_bm90cmFjZV8x"><span class="b">notrace</span></a> <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">no_instrument_function</span><span class="f">)</span><span class="f">)</span>
<a name="58" /><span class="Maybe">      58:</span> 
<a name="59" /><span class="Maybe">      59:</span> <span class="k">/* Intel compiler defines __GNUC__. So we will overwrite implementations</span>
<a name="60" /><span class="Maybe">      60:</span> <span class="k"> * coming from above header files here</span>
<a name="61" /><span class="Maybe">      61:</span> <span class="k"> */</span>
<a name="62" /><span class="False">      62:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__INTEL_COMPILER</span>
<a name="63" /><span class="False">      63:</span> <span class="f">#</span> <span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">compiler</span><span class="f">-</span><span class="b">intel</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="64" /><span class="Maybe">      64:</span> <span class="f">#</span><span class="n">endif</span>
<a name="65" /><span class="Maybe">      65:</span> 
<a name="66" /><span class="Maybe">      66:</span> <span class="k">/*</span>
<a name="67" /><span class="Maybe">      67:</span> <span class="k"> * Generic compiler-dependent macros required for kernel</span>
<a name="68" /><span class="Maybe">      68:</span> <span class="k"> * build go below this comment. Actual compiler/compiler version</span>
<a name="69" /><span class="Maybe">      69:</span> <span class="k"> * specific implementations come from the above header files</span>
<a name="70" /><span class="Maybe">      70:</span> <span class="k"> */</span>
<a name="71" /><span class="Maybe">      71:</span> 
<a name="72" /><span class="Maybe">      72:</span> <span class="m">struct</span> <span class="b">ftrace_branch_data</span> <span class="f">{</span>
<a name="73" /><span class="Maybe">      73:</span>     <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">func</span><span class="f">;</span>
<a name="74" /><span class="Maybe">      74:</span>     <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">file</span><span class="f">;</span>
<a name="75" /><span class="Maybe">      75:</span>     <span class="m">unsigned</span> <span class="b">line</span><span class="f">;</span>
<a name="76" /><span class="Maybe">      76:</span>     <span class="m">union</span> <span class="f">{</span>
<a name="77" /><span class="Maybe">      77:</span>         <span class="m">struct</span> <span class="f">{</span>
<a name="78" /><span class="Maybe">      78:</span>             <span class="m">unsigned</span> <span class="m">long</span> <span class="b">correct</span><span class="f">;</span>
<a name="79" /><span class="Maybe">      79:</span>             <span class="m">unsigned</span> <span class="m">long</span> <span class="b">incorrect</span><span class="f">;</span>
<a name="80" /><span class="Maybe">      80:</span>         <span class="f">}</span><span class="f">;</span>
<a name="81" /><span class="Maybe">      81:</span>         <span class="m">struct</span> <span class="f">{</span>
<a name="82" /><span class="Maybe">      82:</span>             <span class="m">unsigned</span> <span class="m">long</span> <span class="b">miss</span><span class="f">;</span>
<a name="83" /><span class="Maybe">      83:</span>             <span class="m">unsigned</span> <span class="m">long</span> <span class="b">hit</span><span class="f">;</span>
<a name="84" /><span class="Maybe">      84:</span>         <span class="f">}</span><span class="f">;</span>
<a name="85" /><span class="Maybe">      85:</span>         <span class="m">unsigned</span> <span class="m">long</span> <span class="b">miss_hit</span><span class="f">[</span><span class="c">2</span><span class="f">]</span><span class="f">;</span>
<a name="86" /><span class="Maybe">      86:</span>     <span class="f">}</span><span class="f">;</span>
<a name="87" /><span class="Maybe">      87:</span> <span class="f">}</span><span class="f">;</span>
<a name="88" /><span class="Maybe">      88:</span> 
<a name="89" /><span class="Maybe">      89:</span> <span class="k">/*</span>
<a name="90" /><span class="Maybe">      90:</span> <span class="k"> * Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code</span>
<a name="91" /><span class="Maybe">      91:</span> <span class="k"> * to disable branch tracing on a per file basis.</span>
<a name="92" /><span class="Maybe">      92:</span> <span class="k"> */</span>
<a name="93" /><span class="False">      93:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><span class="b">CONFIG_TRACE_BRANCH_PROFILING</span><span class="f">)</span> \
<a name="94" /><span class="False">      94:</span>     <span class="f">&amp;&amp;</span> <span class="f">!</span><span class="b">defined</span><span class="f">(</span><span class="b">DISABLE_BRANCH_PROFILING</span><span class="f">)</span> <span class="f">&amp;&amp;</span> <span class="f">!</span><span class="b">defined</span><span class="f">(</span><span class="b">__CHECKER__</span><span class="f">)</span>
<a name="95" /><span class="False">      95:</span> <span class="m">void</span> <span class="b">ftrace_likely_update</span><span class="f">(</span><span class="m">struct</span> <span class="b">ftrace_branch_data</span> <span class="f">*</span><span class="b">f</span><span class="f">,</span> <span class="m">int</span> <span class="b">val</span><span class="f">,</span> <span class="m">int</span> <span class="b">expect</span><span class="f">)</span><span class="f">;</span>
<a name="96" /><span class="False">      96:</span> 
<a name="97" /><span class="False">      97:</span> <span class="f">#</span><span class="n">define</span> <span class="b">likely_notrace</span><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">__builtin_expect</span><span class="f">(</span><span class="f">!</span><span class="f">!</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">,</span> <span class="c">1</span><span class="f">)</span>
<a name="98" /><span class="False">      98:</span> <span class="f">#</span><span class="n">define</span> <span class="b">unlikely_notrace</span><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">__builtin_expect</span><span class="f">(</span><span class="f">!</span><span class="f">!</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">,</span> <span class="c">0</span><span class="f">)</span>
<a name="99" /><span class="False">      99:</span> 
<a name="100" /><span class="False">     100:</span> <span class="f">#</span><span class="n">define</span> <span class="b">__branch_check__</span><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="b">expect</span><span class="f">)</span> <span class="f">(</span><span class="f">{</span>                    \
<a name="101" /><span class="False">     101:</span>             <span class="m">int</span> <span class="b">______r</span><span class="f">;</span>                    \
<a name="102" /><span class="False">     102:</span>             <span class="m">static</span> <span class="m">struct</span> <span class="b">ftrace_branch_data</span>        \
<a name="103" /><span class="False">     103:</span>                 <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">__aligned__</span><span class="f">(</span><span class="c">4</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>        \
<a name="104" /><span class="False">     104:</span>                 <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">section</span><span class="f">(</span><span class="e">&quot;_ftrace_annotated_branch&quot;</span><span class="f">)</span><span class="f">)</span><span class="f">)</span> \
<a name="105" /><span class="False">     105:</span>                 <span class="b">______f</span> <span class="f">=</span> <span class="f">{</span>                \
<a name="106" /><span class="False">     106:</span>                 <span class="f">.</span><span class="b">func</span> <span class="f">=</span> <span class="b">__func__</span><span class="f">,</span>            \
<a name="107" /><span class="False">     107:</span>                 <span class="f">.</span><span class="b">file</span> <span class="f">=</span> <span class="b">__FILE__</span><span class="f">,</span>            \
<a name="108" /><span class="False">     108:</span>                 <span class="f">.</span><span class="b">line</span> <span class="f">=</span> <span class="b">__LINE__</span><span class="f">,</span>            \
<a name="109" /><span class="False">     109:</span>             <span class="f">}</span><span class="f">;</span>                        \
<a name="110" /><span class="False">     110:</span>             <span class="b">______r</span> <span class="f">=</span> <span class="b">likely_notrace</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">;</span>            \
<a name="111" /><span class="False">     111:</span>             <span class="b">ftrace_likely_update</span><span class="f">(</span><span class="f">&amp;</span><span class="b">______f</span><span class="f">,</span> <span class="b">______r</span><span class="f">,</span> <span class="b">expect</span><span class="f">)</span><span class="f">;</span> \
<a name="112" /><span class="False">     112:</span>             <span class="b">______r</span><span class="f">;</span>                    \
<a name="113" /><span class="False">     113:</span>         <span class="f">}</span><span class="f">)</span>
<a name="114" /><span class="False">     114:</span> 
<a name="115" /><span class="False">     115:</span> <span class="k">/*</span>
<a name="116" /><span class="False">     116:</span> <span class="k"> * Using __builtin_constant_p(x) to ignore cases where the return</span>
<a name="117" /><span class="False">     117:</span> <span class="k"> * value is always the same.  This idea is taken from a similar patch</span>
<a name="118" /><span class="False">     118:</span> <span class="k"> * written by Daniel Walker.</span>
<a name="119" /><span class="False">     119:</span> <span class="k"> */</span>
<a name="120" /><span class="False">     120:</span> <span class="f">#</span> <span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_bGlrZWx5XzA_"><span class="b">likely</span></a>
<a name="121" /><span class="False">     121:</span> <span class="f">#</span>  <span class="n">define</span> <a href="cpu.c_macros_ref.html#_bGlrZWx5XzA_"><span class="b">likely</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="f">(</span><span class="b">__builtin_constant_p</span><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">?</span> <span class="f">!</span><span class="f">!</span><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">:</span> <span class="b">__branch_check__</span><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="c">1</span><span class="f">)</span><span class="f">)</span>
<a name="122" /><span class="False">     122:</span> <span class="f">#</span> <span class="n">endif</span>
<a name="123" /><span class="False">     123:</span> <span class="f">#</span> <span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_dW5saWtlbHlfMA__"><span class="b">unlikely</span></a>
<a name="124" /><span class="False">     124:</span> <span class="f">#</span>  <span class="n">define</span> <a href="cpu.c_macros_ref.html#_dW5saWtlbHlfMA__"><span class="b">unlikely</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="f">(</span><span class="b">__builtin_constant_p</span><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">?</span> <span class="f">!</span><span class="f">!</span><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">:</span> <span class="b">__branch_check__</span><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="c">0</span><span class="f">)</span><span class="f">)</span>
<a name="125" /><span class="False">     125:</span> <span class="f">#</span> <span class="n">endif</span>
<a name="126" /><span class="False">     126:</span> 
<a name="127" /><span class="False">     127:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_PROFILE_ALL_BRANCHES</span>
<a name="128" /><span class="False">     128:</span> <span class="k">/*</span>
<a name="129" /><span class="False">     129:</span> <span class="k"> * &quot;Define &apos;is&apos;&quot;, Bill Clinton</span>
<a name="130" /><span class="False">     130:</span> <span class="k"> * &quot;Define &apos;if&apos;&quot;, Steven Rostedt</span>
<a name="131" /><span class="False">     131:</span> <span class="k"> */</span>
<a name="132" /><span class="False">     132:</span> <span class="f">#</span><span class="n">define</span> <span class="m">if</span><span class="f">(</span><span class="b">cond</span><span class="f">,</span> <span class="f">...</span><span class="f">)</span> <span class="b">__trace_if</span><span class="f">(</span> <span class="f">(</span><span class="b">cond</span> <span class="f">,</span> <span class="f">##</span> <span class="b">__VA_ARGS__</span><span class="f">)</span> <span class="f">)</span>
<a name="133" /><span class="False">     133:</span> <span class="f">#</span><span class="n">define</span> <span class="b">__trace_if</span><span class="f">(</span><span class="b">cond</span><span class="f">)</span> \
<a name="134" /><span class="False">     134:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">__builtin_constant_p</span><span class="f">(</span><span class="f">(</span><span class="b">cond</span><span class="f">)</span><span class="f">)</span> <span class="f">?</span> <span class="f">!</span><span class="f">!</span><span class="f">(</span><span class="b">cond</span><span class="f">)</span> <span class="f">:</span>            \
<a name="135" /><span class="False">     135:</span>     <span class="f">(</span><span class="f">{</span>                                \
<a name="136" /><span class="False">     136:</span>         <span class="m">int</span> <span class="b">______r</span><span class="f">;</span>                        \
<a name="137" /><span class="False">     137:</span>         <span class="m">static</span> <span class="m">struct</span> <span class="b">ftrace_branch_data</span>            \
<a name="138" /><span class="False">     138:</span>             <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">__aligned__</span><span class="f">(</span><span class="c">4</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>            \
<a name="139" /><span class="False">     139:</span>             <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">section</span><span class="f">(</span><span class="e">&quot;_ftrace_branch&quot;</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>    \
<a name="140" /><span class="False">     140:</span>             <span class="b">______f</span> <span class="f">=</span> <span class="f">{</span>                    \
<a name="141" /><span class="False">     141:</span>                 <span class="f">.</span><span class="b">func</span> <span class="f">=</span> <span class="b">__func__</span><span class="f">,</span>            \
<a name="142" /><span class="False">     142:</span>                 <span class="f">.</span><span class="b">file</span> <span class="f">=</span> <span class="b">__FILE__</span><span class="f">,</span>            \
<a name="143" /><span class="False">     143:</span>                 <span class="f">.</span><span class="b">line</span> <span class="f">=</span> <span class="b">__LINE__</span><span class="f">,</span>            \
<a name="144" /><span class="False">     144:</span>             <span class="f">}</span><span class="f">;</span>                        \
<a name="145" /><span class="False">     145:</span>         <span class="b">______r</span> <span class="f">=</span> <span class="f">!</span><span class="f">!</span><span class="f">(</span><span class="b">cond</span><span class="f">)</span><span class="f">;</span>                    \
<a name="146" /><span class="False">     146:</span>         <span class="b">______f</span><span class="f">.</span><span class="b">miss_hit</span><span class="f">[</span><span class="b">______r</span><span class="f">]</span><span class="f">++</span><span class="f">;</span>                    \
<a name="147" /><span class="False">     147:</span>         <span class="b">______r</span><span class="f">;</span>                        \
<a name="148" /><span class="False">     148:</span>     <span class="f">}</span><span class="f">)</span><span class="f">)</span>
<a name="149" /><span class="False">     149:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* CONFIG_PROFILE_ALL_BRANCHES */</span>
<a name="150" /><span class="False">     150:</span> 
<a name="151" /><span class="Maybe">     151:</span> <span class="f">#</span><span class="n">else</span>
<a name="152" /><span class="Maybe">     152:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_bGlrZWx5XzA_"><span class="b">likely</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">__builtin_expect</span><span class="f">(</span><span class="f">!</span><span class="f">!</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">,</span> <span class="c">1</span><span class="f">)</span>
<a name="153" /><span class="Maybe">     153:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_dW5saWtlbHlfMA__"><span class="b">unlikely</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">__builtin_expect</span><span class="f">(</span><span class="f">!</span><span class="f">!</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">,</span> <span class="c">0</span><span class="f">)</span>
<a name="154" /><span class="Maybe">     154:</span> <span class="f">#</span><span class="n">endif</span>
<a name="155" /><span class="Maybe">     155:</span> 
<a name="156" /><span class="Maybe">     156:</span> <span class="k">/* Optimization barrier */</span>
<a name="157" /><span class="False">     157:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_YmFycmllcl8w"><span class="b">barrier</span></a>
<a name="158" /><span class="False">     158:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_YmFycmllcl8w"><span class="b">barrier</span></a><span class="f">(</span><span class="f">)</span> <span class="b">__memory_barrier</span><span class="f">(</span><span class="f">)</span>
<a name="159" /><span class="Maybe">     159:</span> <span class="f">#</span><span class="n">endif</span>
<a name="160" /><span class="Maybe">     160:</span> 
<a name="161" /><span class="Maybe">     161:</span> <span class="k">/* Unreachable code */</span>
<a name="162" /><span class="Maybe">     162:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_dW5yZWFjaGFibGVfMA__"><span class="b">unreachable</span></a>
<a name="163" /><span class="Maybe">     163:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_dW5yZWFjaGFibGVfMA__"><span class="b">unreachable</span></a><span class="f">(</span><span class="f">)</span> <span class="m">do</span> <span class="f">{</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">1</span><span class="f">)</span>
<a name="164" /><span class="Maybe">     164:</span> <span class="f">#</span><span class="n">endif</span>
<a name="165" /><span class="Maybe">     165:</span> 
<a name="166" /><span class="False">     166:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_UkVMT0NfSElERV8w"><span class="b">RELOC_HIDE</span></a>
<a name="167" /><span class="False">     167:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_UkVMT0NfSElERV8w"><span class="b">RELOC_HIDE</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">,</span> <span class="b">off</span><span class="f">)</span>                    \
<a name="168" /><span class="False">     168:</span>   <span class="f">(</span><span class="f">{</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">__ptr</span><span class="f">;</span>                    \
<a name="169" /><span class="False">     169:</span>      <span class="b">__ptr</span> <span class="f">=</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span> <span class="f">(</span><span class="b">ptr</span><span class="f">)</span><span class="f">;</span>                \
<a name="170" /><span class="False">     170:</span>     <span class="f">(</span><span class="b">typeof</span><span class="f">(</span><span class="b">ptr</span><span class="f">)</span><span class="f">)</span> <span class="f">(</span><span class="b">__ptr</span> <span class="f">+</span> <span class="f">(</span><span class="b">off</span><span class="f">)</span><span class="f">)</span><span class="f">;</span> <span class="f">}</span><span class="f">)</span>
<a name="171" /><span class="Maybe">     171:</span> <span class="f">#</span><span class="n">endif</span>
<a name="172" /><span class="Maybe">     172:</span> 
<a name="173" /><span class="Maybe">     173:</span> <span class="k">/* Not-quite-unique ID. */</span>
<a name="174" /><span class="Maybe">     174:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19VTklRVUVfSURfMA__"><span class="b">__UNIQUE_ID</span></a>
<a name="175" /><span class="Maybe">     175:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19VTklRVUVfSURfMA__"><span class="b">__UNIQUE_ID</span></a><span class="f">(</span><span class="b">prefix</span><span class="f">)</span> <a href="cpu.c_macros_noref.html#_X19QQVNURV8w"><span class="b">__PASTE</span></a><span class="f">(</span><a href="cpu.c_macros_noref.html#_X19QQVNURV8w"><span class="b">__PASTE</span></a><span class="f">(</span><span class="b">__UNIQUE_ID_</span><span class="f">,</span> <span class="b">prefix</span><span class="f">)</span><span class="f">,</span> <span class="b">__LINE__</span><span class="f">)</span>
<a name="176" /><span class="Maybe">     176:</span> <span class="f">#</span><span class="n">endif</span>
<a name="177" /><span class="Maybe">     177:</span> 
<a name="178" /><span class="Maybe">     178:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __KERNEL__ */</span>
<a name="179" /><span class="Maybe">     179:</span> 
<a name="180" /><span class="Maybe">     180:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __ASSEMBLY__ */</span>
<a name="181" /><span class="Maybe">     181:</span> 
<a name="182" /><span class="Maybe">     182:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_X19LRVJORUxfX18w"><span class="b">__KERNEL__</span></a>
<a name="183" /><span class="Maybe">     183:</span> <span class="k">/*</span>
<a name="184" /><span class="Maybe">     184:</span> <span class="k"> * Allow us to mark functions as &apos;deprecated&apos; and have gcc emit a nice</span>
<a name="185" /><span class="Maybe">     185:</span> <span class="k"> * warning for each use, in hopes of speeding the functions removal.</span>
<a name="186" /><span class="Maybe">     186:</span> <span class="k"> * Usage is:</span>
<a name="187" /><span class="Maybe">     187:</span> <span class="k"> *         int __deprecated foo(void)</span>
<a name="188" /><span class="Maybe">     188:</span> <span class="k"> */</span>
<a name="189" /><span class="False">     189:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19kZXByZWNhdGVkXzE_"><span class="b">__deprecated</span></a>
<a name="190" /><span class="False">     190:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19kZXByZWNhdGVkXzE_"><span class="b">__deprecated</span></a>        <span class="k">/* unimplemented */</span>
<a name="191" /><span class="Maybe">     191:</span> <span class="f">#</span><span class="n">endif</span>
<a name="192" /><span class="Maybe">     192:</span> 
<a name="193" /><span class="False">     193:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">MODULE</span>
<a name="194" /><span class="False">     194:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19kZXByZWNhdGVkX2Zvcl9tb2R1bGVzXzE_"><span class="b">__deprecated_for_modules</span></a> <a href="cpu.c_macros_ref.html#_X19kZXByZWNhdGVkXzE_"><span class="b">__deprecated</span></a>
<a name="195" /><span class="Maybe">     195:</span> <span class="f">#</span><span class="n">else</span>
<a name="196" /><span class="Maybe">     196:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19kZXByZWNhdGVkX2Zvcl9tb2R1bGVzXzE_"><span class="b">__deprecated_for_modules</span></a>
<a name="197" /><span class="Maybe">     197:</span> <span class="f">#</span><span class="n">endif</span>
<a name="198" /><span class="Maybe">     198:</span> 
<a name="199" /><span class="False">     199:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19tdXN0X2NoZWNrXzE_"><span class="b">__must_check</span></a>
<a name="200" /><span class="False">     200:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19tdXN0X2NoZWNrXzE_"><span class="b">__must_check</span></a>
<a name="201" /><span class="Maybe">     201:</span> <span class="f">#</span><span class="n">endif</span>
<a name="202" /><span class="Maybe">     202:</span> 
<a name="203" /><span class="Maybe">     203:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">CONFIG_ENABLE_MUST_CHECK</span>
<a name="204" /><span class="Maybe">     204:</span> <span class="f">#</span><span class="n">undef</span> <a href="cpu.c_macros_ref.html#_X19tdXN0X2NoZWNrXzE_"><span class="b">__must_check</span></a>
<a name="205" /><span class="Maybe">     205:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19tdXN0X2NoZWNrXzE_"><span class="b">__must_check</span></a>
<a name="206" /><span class="Maybe">     206:</span> <span class="f">#</span><span class="n">endif</span>
<a name="207" /><span class="Maybe">     207:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">CONFIG_ENABLE_WARN_DEPRECATED</span>
<a name="208" /><span class="Maybe">     208:</span> <span class="f">#</span><span class="n">undef</span> <a href="cpu.c_macros_ref.html#_X19kZXByZWNhdGVkXzE_"><span class="b">__deprecated</span></a>
<a name="209" /><span class="Maybe">     209:</span> <span class="f">#</span><span class="n">undef</span> <a href="cpu.c_macros_noref.html#_X19kZXByZWNhdGVkX2Zvcl9tb2R1bGVzXzE_"><span class="b">__deprecated_for_modules</span></a>
<a name="210" /><span class="Maybe">     210:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19kZXByZWNhdGVkXzE_"><span class="b">__deprecated</span></a>
<a name="211" /><span class="Maybe">     211:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19kZXByZWNhdGVkX2Zvcl9tb2R1bGVzXzE_"><span class="b">__deprecated_for_modules</span></a>
<a name="212" /><span class="Maybe">     212:</span> <span class="f">#</span><span class="n">endif</span>
<a name="213" /><span class="Maybe">     213:</span> 
<a name="214" /><span class="Maybe">     214:</span> <span class="k">/*</span>
<a name="215" /><span class="Maybe">     215:</span> <span class="k"> * Allow us to avoid &apos;defined but not used&apos; warnings on functions and data,</span>
<a name="216" /><span class="Maybe">     216:</span> <span class="k"> * as well as force them to be emitted to the assembly file.</span>
<a name="217" /><span class="Maybe">     217:</span> <span class="k"> *</span>
<a name="218" /><span class="Maybe">     218:</span> <span class="k"> * As of gcc 3.4, static functions that are not marked with attribute((used))</span>
<a name="219" /><span class="Maybe">     219:</span> <span class="k"> * may be elided from the assembly file.  As of gcc 3.4, static data not so</span>
<a name="220" /><span class="Maybe">     220:</span> <span class="k"> * marked will not be elided, but this may change in a future gcc version.</span>
<a name="221" /><span class="Maybe">     221:</span> <span class="k"> *</span>
<a name="222" /><span class="Maybe">     222:</span> <span class="k"> * NOTE: Because distributions shipped with a backported unit-at-a-time</span>
<a name="223" /><span class="Maybe">     223:</span> <span class="k"> * compiler in gcc 3.3, we must define __used to be __attribute__((used))</span>
<a name="224" /><span class="Maybe">     224:</span> <span class="k"> * for gcc &gt;=3.3 instead of 3.4.</span>
<a name="225" /><span class="Maybe">     225:</span> <span class="k"> *</span>
<a name="226" /><span class="Maybe">     226:</span> <span class="k"> * In prior versions of gcc, such functions and data would be emitted, but</span>
<a name="227" /><span class="Maybe">     227:</span> <span class="k"> * would be warned about except with attribute((unused)).</span>
<a name="228" /><span class="Maybe">     228:</span> <span class="k"> *</span>
<a name="229" /><span class="Maybe">     229:</span> <span class="k"> * Mark functions that are referenced only in inline assembly as __used so</span>
<a name="230" /><span class="Maybe">     230:</span> <span class="k"> * the code is emitted even though it appears to be unreferenced.</span>
<a name="231" /><span class="Maybe">     231:</span> <span class="k"> */</span>
<a name="232" /><span class="False">     232:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X191c2VkXzA_"><span class="b">__used</span></a>
<a name="233" /><span class="False">     233:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X191c2VkXzA_"><span class="b">__used</span></a>            <span class="k">/* unimplemented */</span>
<a name="234" /><span class="Maybe">     234:</span> <span class="f">#</span><span class="n">endif</span>
<a name="235" /><span class="Maybe">     235:</span> 
<a name="236" /><span class="False">     236:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19tYXliZV91bnVzZWRfMA__"><span class="b">__maybe_unused</span></a>
<a name="237" /><span class="False">     237:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19tYXliZV91bnVzZWRfMA__"><span class="b">__maybe_unused</span></a>        <span class="k">/* unimplemented */</span>
<a name="238" /><span class="Maybe">     238:</span> <span class="f">#</span><span class="n">endif</span>
<a name="239" /><span class="Maybe">     239:</span> 
<a name="240" /><span class="False">     240:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19hbHdheXNfdW51c2VkXzA_"><span class="b">__always_unused</span></a>
<a name="241" /><span class="False">     241:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19hbHdheXNfdW51c2VkXzA_"><span class="b">__always_unused</span></a>    <span class="k">/* unimplemented */</span>
<a name="242" /><span class="Maybe">     242:</span> <span class="f">#</span><span class="n">endif</span>
<a name="243" /><span class="Maybe">     243:</span> 
<a name="244" /><span class="False">     244:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_bm9pbmxpbmVfMA__"><span class="b">noinline</span></a>
<a name="245" /><span class="False">     245:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_bm9pbmxpbmVfMA__"><span class="b">noinline</span></a>
<a name="246" /><span class="Maybe">     246:</span> <span class="f">#</span><span class="n">endif</span>
<a name="247" /><span class="Maybe">     247:</span> 
<a name="248" /><span class="Maybe">     248:</span> <span class="k">/*</span>
<a name="249" /><span class="Maybe">     249:</span> <span class="k"> * Rather then using noinline to prevent stack consumption, use</span>
<a name="250" /><span class="Maybe">     250:</span> <span class="k"> * noinline_for_stack instead.  For documentation reasons.</span>
<a name="251" /><span class="Maybe">     251:</span> <span class="k"> */</span>
<a name="252" /><span class="Maybe">     252:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bm9pbmxpbmVfZm9yX3N0YWNrXzA_"><span class="b">noinline_for_stack</span></a> <a href="cpu.c_macros_ref.html#_bm9pbmxpbmVfMA__"><span class="b">noinline</span></a>
<a name="253" /><span class="Maybe">     253:</span> 
<a name="254" /><span class="False">     254:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19hbHdheXNfaW5saW5lXzA_"><span class="b">__always_inline</span></a>
<a name="255" /><span class="False">     255:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19hbHdheXNfaW5saW5lXzA_"><span class="b">__always_inline</span></a> <span class="m">inline</span>
<a name="256" /><span class="Maybe">     256:</span> <span class="f">#</span><span class="n">endif</span>
<a name="257" /><span class="Maybe">     257:</span> 
<a name="258" /><span class="Maybe">     258:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __KERNEL__ */</span>
<a name="259" /><span class="Maybe">     259:</span> 
<a name="260" /><span class="Maybe">     260:</span> <span class="k">/*</span>
<a name="261" /><span class="Maybe">     261:</span> <span class="k"> * From the GCC manual:</span>
<a name="262" /><span class="Maybe">     262:</span> <span class="k"> *</span>
<a name="263" /><span class="Maybe">     263:</span> <span class="k"> * Many functions do not examine any values except their arguments,</span>
<a name="264" /><span class="Maybe">     264:</span> <span class="k"> * and have no effects except the return value.  Basically this is</span>
<a name="265" /><span class="Maybe">     265:</span> <span class="k"> * just slightly more strict class than the `pure&apos; attribute above,</span>
<a name="266" /><span class="Maybe">     266:</span> <span class="k"> * since function is not allowed to read global memory.</span>
<a name="267" /><span class="Maybe">     267:</span> <span class="k"> *</span>
<a name="268" /><span class="Maybe">     268:</span> <span class="k"> * Note that a function that has pointer arguments and examines the</span>
<a name="269" /><span class="Maybe">     269:</span> <span class="k"> * data pointed to must _not_ be declared `const&apos;.  Likewise, a</span>
<a name="270" /><span class="Maybe">     270:</span> <span class="k"> * function that calls a non-`const&apos; function usually must not be</span>
<a name="271" /><span class="Maybe">     271:</span> <span class="k"> * `const&apos;.  It does not make sense for a `const&apos; function to return</span>
<a name="272" /><span class="Maybe">     272:</span> <span class="k"> * `void&apos;.</span>
<a name="273" /><span class="Maybe">     273:</span> <span class="k"> */</span>
<a name="274" /><span class="False">     274:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19hdHRyaWJ1dGVfY29uc3RfX18w"><span class="b">__attribute_const__</span></a>
<a name="275" /><span class="False">     275:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19hdHRyaWJ1dGVfY29uc3RfX18w"><span class="b">__attribute_const__</span></a>    <span class="k">/* unimplemented */</span>
<a name="276" /><span class="Maybe">     276:</span> <span class="f">#</span><span class="n">endif</span>
<a name="277" /><span class="Maybe">     277:</span> 
<a name="278" /><span class="Maybe">     278:</span> <span class="k">/*</span>
<a name="279" /><span class="Maybe">     279:</span> <span class="k"> * Tell gcc if a function is cold. The compiler will assume any path</span>
<a name="280" /><span class="Maybe">     280:</span> <span class="k"> * directly leading to the call is unlikely.</span>
<a name="281" /><span class="Maybe">     281:</span> <span class="k"> */</span>
<a name="282" /><span class="Maybe">     282:</span> 
<a name="283" /><span class="Maybe">     283:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19jb2xkXzA_"><span class="b">__cold</span></a>
<a name="284" /><span class="Maybe">     284:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19jb2xkXzA_"><span class="b">__cold</span></a>
<a name="285" /><span class="Maybe">     285:</span> <span class="f">#</span><span class="n">endif</span>
<a name="286" /><span class="Maybe">     286:</span> 
<a name="287" /><span class="Maybe">     287:</span> <span class="k">/* Simple shorthand for a section definition */</span>
<a name="288" /><span class="Maybe">     288:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19zZWN0aW9uXzA_"><span class="b">__section</span></a>
<a name="289" /><span class="Maybe">     289:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19zZWN0aW9uXzA_"><span class="b">__section</span></a><span class="f">(</span><span class="b">S</span><span class="f">)</span> <span class="b">__attribute__</span> <span class="f">(</span><span class="f">(</span><span class="b">__section__</span><span class="f">(</span><span class="f">#</span><span class="b">S</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="290" /><span class="Maybe">     290:</span> <span class="f">#</span><span class="n">endif</span>
<a name="291" /><span class="Maybe">     291:</span> 
<a name="292" /><span class="Maybe">     292:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X192aXNpYmxlXzA_"><span class="b">__visible</span></a>
<a name="293" /><span class="Maybe">     293:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X192aXNpYmxlXzA_"><span class="b">__visible</span></a>
<a name="294" /><span class="Maybe">     294:</span> <span class="f">#</span><span class="n">endif</span>
<a name="295" /><span class="Maybe">     295:</span> 
<a name="296" /><span class="Maybe">     296:</span> <span class="k">/* Are two types/vars the same type (ignoring qualifiers)? */</span>
<a name="297" /><span class="Maybe">     297:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19zYW1lX3R5cGVfMA__"><span class="b">__same_type</span></a>
<a name="298" /><span class="Maybe">     298:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19zYW1lX3R5cGVfMA__"><span class="b">__same_type</span></a><span class="f">(</span><span class="b">a</span><span class="f">,</span> <span class="b">b</span><span class="f">)</span> <span class="b">__builtin_types_compatible_p</span><span class="f">(</span><span class="b">typeof</span><span class="f">(</span><span class="b">a</span><span class="f">)</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="b">b</span><span class="f">)</span><span class="f">)</span>
<a name="299" /><span class="Maybe">     299:</span> <span class="f">#</span><span class="n">endif</span>
<a name="300" /><span class="Maybe">     300:</span> 
<a name="301" /><span class="Maybe">     301:</span> <span class="k">/* Compile time object size, -1 for unknown */</span>
<a name="302" /><span class="Maybe">     302:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19jb21waWxldGltZV9vYmplY3Rfc2l6ZV8w"><span class="b">__compiletime_object_size</span></a>
<a name="303" /><span class="Maybe">     303:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19jb21waWxldGltZV9vYmplY3Rfc2l6ZV8w"><span class="b">__compiletime_object_size</span></a><span class="f">(</span><span class="b">obj</span><span class="f">)</span> <span class="f">-</span><span class="c">1</span>
<a name="304" /><span class="Maybe">     304:</span> <span class="f">#</span><span class="n">endif</span>
<a name="305" /><span class="Maybe">     305:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19jb21waWxldGltZV93YXJuaW5nXzA_"><span class="b">__compiletime_warning</span></a>
<a name="306" /><span class="Maybe">     306:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19jb21waWxldGltZV93YXJuaW5nXzA_"><span class="b">__compiletime_warning</span></a><span class="f">(</span><span class="b">message</span><span class="f">)</span>
<a name="307" /><span class="Maybe">     307:</span> <span class="f">#</span><span class="n">endif</span>
<a name="308" /><span class="Maybe">     308:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19jb21waWxldGltZV9lcnJvcl8w"><span class="b">__compiletime_error</span></a>
<a name="309" /><span class="Maybe">     309:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19jb21waWxldGltZV9lcnJvcl8w"><span class="b">__compiletime_error</span></a><span class="f">(</span><span class="b">message</span><span class="f">)</span>
<a name="310" /><span class="Maybe">     310:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19jb21waWxldGltZV9lcnJvcl9mYWxsYmFja18w"><span class="b">__compiletime_error_fallback</span></a><span class="f">(</span><span class="b">condition</span><span class="f">)</span> \
<a name="311" /><span class="Maybe">     311:</span>     <span class="m">do</span> <span class="f">{</span> <span class="f">(</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="m">sizeof</span><span class="f">(</span><span class="m">char</span><span class="f">[</span><span class="c">1</span> <span class="f">-</span> <span class="c">2</span> <span class="f">*</span> <span class="b">condition</span><span class="f">]</span><span class="f">)</span><span class="f">)</span><span class="f">;</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="312" /><span class="False">     312:</span> <span class="f">#</span><span class="n">else</span>
<a name="313" /><span class="False">     313:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19jb21waWxldGltZV9lcnJvcl9mYWxsYmFja18w"><span class="b">__compiletime_error_fallback</span></a><span class="f">(</span><span class="b">condition</span><span class="f">)</span> <span class="m">do</span> <span class="f">{</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="314" /><span class="Maybe">     314:</span> <span class="f">#</span><span class="n">endif</span>
<a name="315" /><span class="Maybe">     315:</span> 
<a name="316" /><span class="Maybe">     316:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19jb21waWxldGltZV9hc3NlcnRfMA__"><span class="b">__compiletime_assert</span></a><span class="f">(</span><span class="b">condition</span><span class="f">,</span> <span class="b">msg</span><span class="f">,</span> <span class="b">prefix</span><span class="f">,</span> <span class="b">suffix</span><span class="f">)</span>        \
<a name="317" /><span class="Maybe">     317:</span>     <span class="m">do</span> <span class="f">{</span>                                \
<a name="318" /><span class="Maybe">     318:</span>         <span class="m">bool</span> <span class="b">__cond</span> <span class="f">=</span> <span class="f">!</span><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">;</span>                \
<a name="319" /><span class="Maybe">     319:</span>         <span class="m">extern</span> <span class="m">void</span> <span class="b">prefix</span> <span class="f">##</span> <span class="b">suffix</span><span class="f">(</span><span class="m">void</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_X19jb21waWxldGltZV9lcnJvcl8w"><span class="b">__compiletime_error</span></a><span class="f">(</span><span class="b">msg</span><span class="f">)</span><span class="f">;</span> \
<a name="320" /><span class="Maybe">     320:</span>         <span class="m">if</span> <span class="f">(</span><span class="b">__cond</span><span class="f">)</span>                        \
<a name="321" /><span class="Maybe">     321:</span>             <span class="b">prefix</span> <span class="f">##</span> <span class="b">suffix</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                \
<a name="322" /><span class="Maybe">     322:</span>         <a href="cpu.c_macros_noref.html#_X19jb21waWxldGltZV9lcnJvcl9mYWxsYmFja18w"><span class="b">__compiletime_error_fallback</span></a><span class="f">(</span><span class="b">__cond</span><span class="f">)</span><span class="f">;</span>            \
<a name="323" /><span class="Maybe">     323:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="324" /><span class="Maybe">     324:</span> 
<a name="325" /><span class="Maybe">     325:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X2NvbXBpbGV0aW1lX2Fzc2VydF8w"><span class="b">_compiletime_assert</span></a><span class="f">(</span><span class="b">condition</span><span class="f">,</span> <span class="b">msg</span><span class="f">,</span> <span class="b">prefix</span><span class="f">,</span> <span class="b">suffix</span><span class="f">)</span> \
<a name="326" /><span class="Maybe">     326:</span>     <a href="cpu.c_macros_noref.html#_X19jb21waWxldGltZV9hc3NlcnRfMA__"><span class="b">__compiletime_assert</span></a><span class="f">(</span><span class="b">condition</span><span class="f">,</span> <span class="b">msg</span><span class="f">,</span> <span class="b">prefix</span><span class="f">,</span> <span class="b">suffix</span><span class="f">)</span>
<a name="327" /><span class="Maybe">     327:</span> 
<a name="328" /><span class="Maybe">     328:</span> <span class="k">/**</span>
<a name="329" /><span class="Maybe">     329:</span> <span class="k"> * compiletime_assert - break build and emit msg if condition is false</span>
<a name="330" /><span class="Maybe">     330:</span> <span class="k"> * @condition: a compile-time constant condition to check</span>
<a name="331" /><span class="Maybe">     331:</span> <span class="k"> * @msg:       a message to emit if condition is false</span>
<a name="332" /><span class="Maybe">     332:</span> <span class="k"> *</span>
<a name="333" /><span class="Maybe">     333:</span> <span class="k"> * In tradition of POSIX assert, this macro will break the build if the</span>
<a name="334" /><span class="Maybe">     334:</span> <span class="k"> * supplied condition is *false*, emitting the supplied error message if the</span>
<a name="335" /><span class="Maybe">     335:</span> <span class="k"> * compiler has support to do so.</span>
<a name="336" /><span class="Maybe">     336:</span> <span class="k"> */</span>
<a name="337" /><span class="Maybe">     337:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Y29tcGlsZXRpbWVfYXNzZXJ0XzA_"><span class="b">compiletime_assert</span></a><span class="f">(</span><span class="b">condition</span><span class="f">,</span> <span class="b">msg</span><span class="f">)</span> \
<a name="338" /><span class="Maybe">     338:</span>     <a href="cpu.c_macros_noref.html#_X2NvbXBpbGV0aW1lX2Fzc2VydF8w"><span class="b">_compiletime_assert</span></a><span class="f">(</span><span class="b">condition</span><span class="f">,</span> <span class="b">msg</span><span class="f">,</span> <span class="b">__compiletime_assert_</span><span class="f">,</span> <span class="b">__LINE__</span><span class="f">)</span>
<a name="339" /><span class="Maybe">     339:</span> 
<a name="340" /><span class="Maybe">     340:</span> <span class="k">/*</span>
<a name="341" /><span class="Maybe">     341:</span> <span class="k"> * Prevent the compiler from merging or refetching accesses.  The compiler</span>
<a name="342" /><span class="Maybe">     342:</span> <span class="k"> * is also forbidden from reordering successive instances of ACCESS_ONCE(),</span>
<a name="343" /><span class="Maybe">     343:</span> <span class="k"> * but only when the compiler is aware of some particular ordering.  One way</span>
<a name="344" /><span class="Maybe">     344:</span> <span class="k"> * to make the compiler aware of ordering is to put the two invocations of</span>
<a name="345" /><span class="Maybe">     345:</span> <span class="k"> * ACCESS_ONCE() in different C statements.</span>
<a name="346" /><span class="Maybe">     346:</span> <span class="k"> *</span>
<a name="347" /><span class="Maybe">     347:</span> <span class="k"> * This macro does absolutely -nothing- to prevent the CPU from reordering,</span>
<a name="348" /><span class="Maybe">     348:</span> <span class="k"> * merging, or refetching absolutely anything at any time.  Its main intended</span>
<a name="349" /><span class="Maybe">     349:</span> <span class="k"> * use is to mediate communication between process-level code and irq/NMI</span>
<a name="350" /><span class="Maybe">     350:</span> <span class="k"> * handlers, all running on the same CPU.</span>
<a name="351" /><span class="Maybe">     351:</span> <span class="k"> */</span>
<a name="352" /><span class="Maybe">     352:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_QUNDRVNTX09OQ0VfMA__"><span class="b">ACCESS_ONCE</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="m">volatile</span> <span class="b">typeof</span><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">*</span><span class="f">)</span><span class="f">&amp;</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">)</span>
<a name="353" /><span class="Maybe">     353:</span> 
<a name="354" /><span class="Maybe">     354:</span> <span class="k">/* Ignore/forbid kprobes attach on very low level functions marked by this attribute: */</span>
<a name="355" /><span class="Maybe">     355:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX0tQUk9CRVNfMA__"><span class="b">CONFIG_KPROBES</span></a>
<a name="356" /><span class="Maybe">     356:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19rcHJvYmVzXzA_"><span class="b">__kprobes</span></a>    <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">__section__</span><span class="f">(</span><span class="e">&quot;.kprobes.text&quot;</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="357" /><span class="False">     357:</span> <span class="f">#</span><span class="n">else</span>
<a name="358" /><span class="False">     358:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19rcHJvYmVzXzA_"><span class="b">__kprobes</span></a>
<a name="359" /><span class="Maybe">     359:</span> <span class="f">#</span><span class="n">endif</span>
<a name="360" /><span class="True">     360:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __LINUX_COMPILER_H */</span>
<a name="361" /><span class="True">     361:</span> </pre>
  </body>
</html>
